perm filename OP1.MAC[SYS,HE] blob sn#004241 filedate 1972-06-08 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00004 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002		TITLE	OP1 - OPERATOR 1
 00004 00003		MOVEM 7,TEMP#
 00006 00004		RADIX 10
 00016 ENDMK
⊗;
	TITLE	OP1 - OPERATOR 1

ENTRY OP1
INTERNAL MAGSUM,CUT
EXTERNAL  ADJUST, LLINE, FLINE, TVWORD, LINLEN, BITS, IWID
EXTERNAL TVOUT, LSIDE, RSIDE
ARGAC=16
OPDEF SUBR [PUSHJ 17,0]
OPDEF RETURN [POPJ 17,0]

OP1:	MOVEM 16,TEMPY#
	HRRZI 16,ACS
	BLT 16,ACS+15
	MOVE LLINE
	SUB FLINE
	SOS
	MOVEM YCNT#
	MOVE TVOUT;		SET UP POINTERS IN 0-3
	HRR TVWORD
	AOS
	MOVE 1,
	MOVE 2,LINLEN
	MOVE 3,2
	ASH 3,1
	ADD 2,1
	ADD 3,1
	MOVN 16,BITS;		16 IS -BITS
LOOPY:	MOVE 5,IWID
	SUBI 5,2
	MOVEM 5,XTMP#
	ILDB 4,3;		DENSITIES IN 4-14
	ILDB 5,2
	ILDB 6,1
	ILDB 7,3
	ILDB 10,2
	ILDB 11,1
LOOP:	ILDB 12,3
	ILDB 13,2
	ILDB 14,1
	SUBM 12,6;		6←12-6     SOBEL OPERATOR
	SUBM 14,4;		4←14-4
	SUBM 13,5;		5←13-5
	MOVE 15,11
	SUB 15,7;		15←11-7
	ASH 5,1;		5←2(13-5)
	ASH 15,1;		15←2(11-7)
	SUB 15,6
	ADD 15,4;		15←2(11-7)-(12-6)+(14-4)
	ADD 6,5
	ADD 6,4;		6←(12-6)+2(13-5)+(14-4)
	MOVM 4,6
	MOVEM 7,TEMP#
	MOVM 6,15
	ADD 4,SV+6(16)
	ADD 6,SV+6(16)
	XCT SVA+6(16)
	XCT SVB+6(16)
	ASH 6,1
	MOVE 5,6
	LDB 4,PPP(4)
	CAMG 4,CUT#
	MOVEI 4,0
	CAML 16,[-3]
	ASH 4,-1
	ADDM 4,MAGSUM#
	IDPB 4,0
	MOVE 7,TEMP
	MOVE 15,[XWD 7,4]
	BLT 15,11
	SOSLE XTMP
	JRST LOOP
	SETZM 15
	MOVEI 14,3
	DPB 15,[POINT 6,(14),5]
	SOJGE 14,.-1
	SOSLE YCNT
	JRST LOOPY
	AOS LSIDE
	AOS FLINE
	SOS LLINE
	SOS 1,RSIDE
	SUB 1,LSIDE
	AOS 1
	MOVEM 1,IWID
	SUBR ADJUST
	HRLZI 16,ACS
	BLT 16,16
	MOVE 16,TEMPY
	POPJ 17,


SV:	OCT 14,7,2,1
SVA:	IDIVI 4,24
	IDIVI 4,11
	ASH 4,-2
	ASH 4,-1
SVB:	IDIVI 6,24
	IDIVI 6,11
	ASH 6,-2
	ASH 6,-1
	RADIX 10
MAGT:	BYTE (4) 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
	BYTE (4) 1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
	BYTE (4) 2,2,3,4,4,5,6,7,8,9,10,11,12,13,14,15
	BYTE (4) 3,3,4,4,5,6,7,8,9,9,10,11,12,13,14,15
	BYTE (4) 4,4,4,5,6,6,7,8,9,10,11,12,13,14,15,15
	BYTE (4) 5,5,5,6,6,7,8,9,9,10,11,12,13,14,15,15
	BYTE (4) 6,6,6,7,7,8,8,9,10,11,12,12,13,14,15,15
	BYTE (4) 7,7,7,8,8,9,9,10,10,11,12,13,14,15,15,15
	BYTE (4) 8,8,8,9,9,9,10,10,11,12,13,14,14,15,15,15
	BYTE (4) 9,9,9,9,10,10,11,11,12,13,13,14,15,15,15,15
	BYTE (4) 10,10,10,10,11,11,12,12,13,13,14,15,15,15,15,15
	BYTE (4) 11,11,11,11,12,12,12,13,14,14,15,15,15,15,15,15
	BYTE (4) 12,12,12,12,13,13,13,14,14,15,15,15,15,15,15,15
	BYTE (4) 13,13,13,13,14,14,14,15,15,15,15,15,15,15,15,15
	BYTE (4) 14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15
	BYTE (4) 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
	RADIX 8

	DEFINE PP(N) <XWD N'0405,MAGT>
	DEFINE PP1(N) <XWD N'0405,MAGT+1>
KK==40
PPP:	REPEAT 11,<PP \KK
		KK==KK-4>
	KK==40
	REPEAT 7,<PP1 \KK
	KK==KK-4>

ACS:	BLOCK 17
	END